package com.kehutong.payfees.worker;

import com.kehutong.common.worker.Worker;
import com.kehutong.payfees.service.ChargeChooseServiceImpl;
import org.coraframework.util.Ioc;

import java.time.LocalDateTime;

//public class GenerateBillWorker implements Worker<GenerateBillWorker> {

//    public GenerateBillWorker() {
//        this.nextTime = LocalDateTime.now().plusMinutes(3);
//        this.jdbcSession = Ioc.getInstance(SQLSession.class);
//        this.chargeChooseService = Ioc.getInstance(ChargeChooseServiceImpl.class);
//    }
//
//    private LocalDateTime nextTime;
//    private SQLSession jdbcSession;
//    private ChargeChooseServiceImpl chargeChooseService;
//
//    @Override
//    public String getId() {
//        return "generate-bill-worker";
//    }
//
//    @Override
//    public void run() {
//        this.doWork();
//    }
//
//    private void doWork() {
//        List<ChargeGenerate> generates = jdbcSession.findArray(ChargeGenerate.class)
//                .eq("resultType", ResultType.PROCESSING.getId())
//                .minEq("exeDate", LocalDateTime.now())
//                .exe();
//
//        for (ChargeGenerate entity : generates) {
//           List<House> houses = jdbcSession.findArray(House.class)
//                   .in("id", entity.getHouseIds())
//                   .exe();
//
//            houses.forEach(house -> {
//
//                LocalDate billDateFrom;
//                LocalDate billDateTo;
//                if(entity.getGenerateType() == GenerateType.INSTRUMENT){
//                    billDateFrom = Converter.toLocalDate(entity.getReadMonth() + "-01");
//                    billDateTo = billDateFrom.with(TemporalAdjusters.lastDayOfMonth());
//                }else{
//                    billDateFrom = entity.getStartDate();
//                    billDateTo = entity.getEndDate();
//                }
//
//                List<ChargeBill> oldBills = jdbcSession.findArray(ChargeBill.class)
//                        .eq("houseNo", house.getId())
//                        .eq("billDateFrom", billDateFrom)
//                        .eq("billDateTo",billDateTo)
//                        .eq("shouldPayDate", entity.getShouldPayDate())
//                        .eq("paidState", BillPaidState.UNPAID)
//                        .eq("generateType", entity.getGenerateType().getId())
//                        .eq("deleted",false)
//                        .exe();
//                oldBills.forEach(oldBill->{
//                    oldBill.setDeleted(true);
//                });
//                jdbcSession.updateById(oldBills);
//
//
//                ChargeBill bill = Pool.newInstance(ChargeBill.class);
//                bill.setGenerateNo(entity.getId());
//                bill.setCommunityNo(house.getCommunityNo());
//                bill.setCommunityName(house.getCommunityName());
//                bill.setBuildingNo(house.getBuildNo());
//                bill.setBuildingName(house.getBuildName());
//                bill.setUnitName(house.getUnitName());
//                bill.setHouseName(house.getName());
//                bill.setHouseNo(house.getId());
//                if(entity.getGenerateType() == GenerateType.CONVENTIONAL){
//                    bill.setBillDateFrom(entity.getStartDate());
//                    bill.setBillDateTo(entity.getEndDate());
//
//                    // 获取所有的常规选用标准信息
//                    List<ChargeChoose> chooses = jdbcSession.findArray(ChargeChoose.class)
//                            .eq("communityNo", entity.getCommunityNo())
//                            .eq("houseNo", house.getId())
//                            .eq("chooseType", ChooseType.CONVENTIONAL.getId())
//                            .eq("enableState", BillEnableState.ENABLE.getId())
//                            .eq("deleted", false)
//                            .exe();
//
//                    BigDecimal total = BigDecimal.ZERO;
//                    for (ChargeChoose item: chooses) {
//                        ChargeBillItem billItem = Pool.newInstance(ChargeBillItem.class);
//                        billItem.setBillNo(bill.getId());
//                        billItem.setFeeId(item.getFeeTypeId());
//                        billItem.setName(item.getFeeTypeName());
//                        billItem.setAmount(item.getAmount());
//                        billItem.setUnitPrice(item.getPrice());
//                        billItem.setChooseId(item.getId());
//
//                        BigDecimal subTotal = item.getTotal();
//
//                        billItem.setSubTotal(new BigDecimal(subTotal.toString())
//                                .setScale(Integer.valueOf(item.getUnitPrice().getId()),
//                                        Integer.valueOf(item.getComputeType().getId())));
//                        jdbcSession.insert(billItem);
//
//                        total = total.add(billItem.getSubTotal());
//                    }
//                    bill.setTotal(total);
//                }else{
//                    bill.setBillDateFrom(billDateFrom);
//                    bill.setBillDateTo(bill.getBillDateFrom().with(TemporalAdjusters.lastDayOfMonth()));
//
//                    // 获取所有的仪表选用标准信息
//                    List<ChargeChoose> chooses = jdbcSession.findArray(ChargeChoose.class)
//                            .eq("communityNo", entity.getCommunityNo())
//                            .eq("houseNo", house.getId())
//                            .eq("chooseType", ChooseType.INSTRUMENT.getId())
//                            .eq("enableState", BillEnableState.ENABLE.getId())
//                            .eq("deleted", false)
//                            .exe();
//
//                    BigDecimal total = BigDecimal.ZERO;
//                    for (ChargeChoose item: chooses) {
//                        List<ChargeMonthRead> monthReads = jdbcSession.findArray(ChargeMonthRead.class)
//                                .eq("communityNo", entity.getCommunityNo())
//                                .eq("readMonth", entity.getReadMonth())
//                                .eq("houseId",house.getId())
//                                .eq("contactName", house.getOwnerName())
//                                .eq("appType", AppType.ENTER.getId())
//                                .eq("instrumentId", item.getInstrumentId())
//                                .eq("deleted", false)
//                                .exe();
//                        for (ChargeMonthRead monthRead: monthReads) {
//                            ChargeBillItem billItem = Pool.newInstance(ChargeBillItem.class);
//                            billItem.setMonthReadNo(monthRead.getId());
//                            billItem.setBillNo(bill.getId());
//                            billItem.setFeeId(item.getFeeTypeId());
//                            billItem.setName(item.getFeeTypeName());
//                            billItem.setLastReadNumber(monthRead.getLateRead());
//                            billItem.setTheReadNumber(monthRead.getCurrentRead());
//                            billItem.setAmount(monthRead.getBillNumber());
//                            billItem.setUnitPrice(item.getPrice());
//                            billItem.setChooseId(item.getId());
//
//                            BigDecimal subTotal;
//                            if(item.getChargeMode() == ChargeModeType.AMOUNT){
//                                subTotal = Objects.nonNull(monthRead.getBillNumber()) ? monthRead.getBillNumber().multiply(item.getPrice()) : BigDecimal.ZERO.multiply(item.getPrice());
//                            }else{
//                                item.setAmount(monthRead.getBillNumber());
//                                chargeChooseService.getTotal(item);
//                                subTotal = item.getTotal();
//                            }
//                            //精确元角分，四舍五入
//                            billItem.setSubTotal(new BigDecimal(subTotal.toString())
//                                    .setScale(Integer.valueOf(item.getUnitPrice().getId()),
//                                            Integer.valueOf(item.getComputeType().getId())));
//                            jdbcSession.insert(billItem);
//
//                            total = total.add(billItem.getSubTotal());
//                        }
//                    }
//                    bill.setTotal(total);
//                }
//                bill.setShouldPayDate(entity.getShouldPayDate());
//                bill.setEnableState(BillEnableState.ENABLE);
//                bill.setGenerateType(entity.getGenerateType());
//
//                if(bill.getTotal().compareTo(BigDecimal.ZERO) == 1){
//                    jdbcSession.insert(bill);
//                }
//            });
//            entity.setResultType(ResultType.COMPLETE);
//            jdbcSession.updateById(entity);
//        }
//    }
//
//    @Override
//    public boolean sendAble() {
//        return LocalDateTime.now().isAfter(nextTime);
//    }
//
//    @Override
//    public boolean isEffect() {
//        return true;
//    }
//
//	@Override
//	public LocalDateTime getHandTime() {
//		return null;
//	}
//
//}
